#ifndef SQLUTIL_H
#define SQLUTIL_H

#include <QObject>
#include <QString>
#include <QtSql/QSqlDatabase>
#include <QtSql/QSqlQuery>
#include <QtSql/QSqlError>

//单例模式封装sql操作
class SqlUtil : public QObject
{
public:

    static SqlUtil *instance();

    void setDatabaseInfo(QString strDriver,QString strHostName,int port,QString strDatabaseName, QString strUserName, QString strPassWord);
    void setDatabaseInfo(QString strDriver,QString strHostName,QString strDatabaseName);
    void getDrivers();

    void initDatabase();

    void closeDatabase();

    QSqlDatabase getDb();


    /*******************************************
     * 执行Sql语句
     * 输入值：
     *       strSql 需要执行的语句 主要包括 增 删 改 操作
     * 返回值：返回执行是否成功
     *****************************************/
    bool executeSql(QString strSql);
    bool executeSql(QSqlQuery query);

    /*******************************************
     * 执行Sql语句
     * 输入值：
     *         variantlistResult 存储查询的结果
     *         strSql  需要执行的语句 查询操作
     *         iColumn 查询语句返回的列数
     *
     * 返回值： 返回查询是否成功
     *****************************************/
    bool selectData(QList<QVariantList> &variantlistResult,QString strSql,int iColumn);//查询数据

   //事务操作

private:
    //私有化构造器
    explicit SqlUtil();
    ~SqlUtil();

    //数据库实例
    QSqlDatabase m_db;

    QString m_driver; //驱动
    QString m_strHostName;    //服务器名称
    int m_port; //端口
    QString m_strDatabaseName; //数据库名称
    QString m_strUserName;    //用户名
    QString m_strPassWord;    //密码
    //创建单例连接数据库的实例
    static SqlUtil *sqlUtil ;
};

#endif // SQLUTIL_H
